package amtf

import (
	"server/model/system"

	"gorm.io/datatypes"
)

type S流程记录 struct {
	A执行人 *uint `json:"执行人"`
}

type S流程设置 struct {
	A禁止手动流程动作 *bool               `json:"禁止手动流程动作"`
	A允许操作角色   map[string][]string `json:"允许操作角色"`
}

type S插件 struct {
	A名称   string             `json:"名称" gorm:"unique;column:名称;"`
	A英文名  string             `json:"英文名" gorm:"column:英文名;备注:;"`
	A组件s  []*S组件             `json:"组件s" gorm:"-"`
	A图标   string             `json:"图标"`
	A标题   string             `json:"标题"`
	Amenu system.SysBaseMenu `json:"menu" gorm:"-"`
}

// func (S插件) TableName() string {
// 	return "a插件"
// }

type S组件 struct {
	A名称        string         `json:"名称"`
	A英文名       string         `json:"英文名"`
	A插件名       string         `json:"插件名"`
	A插件英文名     string         `json:"插件英文名"`
	A表名        string         `json:"表名"`
	Amodel名    string         `json:"-"`
	Amodel英文名  string         `json:"-"`
	Amodel英文全名 string         `json:"-"`
	A标题        string         `json:"标题"`
	A图标        string         `json:"图标"`
	Aapi       *Sapi          `json:"-" gorm:"-"`
	A其他api     any            `json:"-"`
	Aservice   *Sservice      `json:"-"`
	Amodel     any            `json:"model"`
	A组件单项模板    map[string]any `json:"组件单项模板"`
	A列表req     S列表req
	A字段组       []*S字段 `json:"字段组"`
	A组件关联包s    []string
	Amodel关联包s []string
	A权限集       *S权限集       `json:"权限集"`
	A自动挡hook   *S组件自动挡hook `json:"-" gorm:"-"`
	A有自动挡hook  bool        `json:"有自动挡hook"`
	A手动挡       *S组件手动挡     `json:"-" gorm:"-"`
	A有手动挡      bool        `json:"有手动挡"`
	A有看板否      bool        `json:"有看板否"`
	// A树结构       map[string]string `json:"树结构"`
	A树结构       datatypes.JSON `json:"树结构"`
	Acards     datatypes.JSON `json:"cards"`
	A状态候选值     datatypes.JSON `json:"状态候选值"`
	A流程设置      S流程设置          `json:"流程设置"`
	A成候选值字段名组  datatypes.JSON `json:"成候选值字段名组"`
	A多字段搜索字段名s datatypes.JSON `json:"多字段搜索字段名s"`
	A源reqdata  any
}

type S字段 struct {
	A名称            string         `json:"名称"`
	A名称go          string         `json:"-"`
	A名称sql         string         `json:"-"`
	A类型            string         `json:"类型"`
	A类型_go         string         `json:"-"`
	A标题            string         `json:"标题"`
	A详情标题          string         `json:"详情标题"`
	Acards         datatypes.JSON `json:"cards"`
	A插槽            datatypes.JSON `json:"插槽"`
	A图标            string         `json:"图标"`
	A是主键           bool           `json:"是主键"`
	A显示设置          any            `json:"显示设置"`
	A显示设置_独立详情     any            `json:"显示设置_独立详情"`
	A显示设置_主表       any            `json:"显示设置_主表"`
	A显示设置_子表中_独立详情 any            `json:"显示设置_子表中_独立详情"`
	A显示设置_子表中_简化详情 any            `json:"显示设置_子表中_简化详情"`
	A显示设置_子表中_父表内嵌 any            `json:"显示设置_子表中_父表内嵌"`
	A子表显示设置        any            `json:"子表显示设置"`
	A子表显示设置_独立详情   any            `json:"子表显示设置_独立详情"`
	A子表显示设置_简化详情   any            `json:"子表显示设置_简化详情"`
	A子表显示设置_父表内嵌   any            `json:"子表显示设置_父表内嵌"`
	A不展开选型否        bool           `json:"不展开选项否"`
	A是公用字段         bool           `json:"是公用字段"`
	A是唯一值          bool           `json:"是唯一值"`
	A必填            bool           `json:"必填"`
	A默认值           any            `json:"默认值"`
	A默认值_go        string         `json:"-"`
	A备注            string         `json:"备注"`
	A数据长度          string         `json:"数据长度"`
	A表单字段宽         float64        `json:"表单字段宽"`
	A候选值           datatypes.JSON `json:"候选值"`
	A候选值源字段        string         `json:"候选值源字段"`
	A候选值设置         any            `json:"候选值设置"`
	// A关联属性        map[string]string `json:"关联属性"`
	A关联属性     datatypes.JSON `json:"关联属性"`
	Ajoin属性   datatypes.JSON `json:"join属性"`
	A关联组件     *S组件           `json:"关联组件" gorm:"-"`
	A省略gorm   bool           `json:"-"`
	A不入库      bool           `json:"不入库"`
	A无model   bool           `json:"无model"`
	A有链接      bool           `json:"有链接"`
	A关联包名     string         `json:"关联包名"`
	A外键字段名    string         `json:"外键字段名"`
	A外键字段名_go string         `json:"外键字段名_go"`
	A关联约束     string         `json:"关联约束"`
	// A指定外键标签      template.HTML
	// 给外键记录信息用
	A是外键   bool   `json:"是外键"`
	A关联插件名 string `json:"关联插件名"`
	A关联组件名 string `json:"关联组件名"`
	A组合值唯一 string `json:"组合值唯一"`
}

type S组件手动挡 struct {
	A注册 any `gorm:"-"`
}

type S组件自动挡hook struct {
	A注册路由 any `gorm:"-"`
	// A注册路由    func(*gin.RouterGroup, *gin.RouterGroup) `gorm:"-"`
	A增s7     any
	A增或改之前s7 any
	A改之前s7   any
	Aservice any
	Ajoin    any
	A增       any
}

type S权限集 struct {
	A全公开 bool `json:"全公开"`
	A增   *S权限 `json:"增"`
}

type S权限 struct {
	A公开 bool           `json:"公开"`
	A角色 datatypes.JSON `json:"角色配置"`
}

// func 根据权限处理api(PrivateGroup *gin.RouterGroup, PublicGroup *gin.RouterGroup, 组件 *S组件, api Sapi, 关键词 string) {
//     公开否:=
// 	if 组件.A权限集.A增.A公开 {
// 		PublicGroup.POST("", api.A增)
// 	} else {
// 		PrivateGroup.POST("", api.A增)
// 	}
// }
